package main

import (
	"encoding/json"
	"fmt"
	"os"
)

/*
√ 使用JSON包的编码器编码谦嫂的信息为JSON文件
√ 编码谦哥八大姨结构体切片为JSON文件
√ 解码《于谦.json》为map
√ 解码《于谦.json》为结构体
√ 解码谦哥八大姨JSON文件为结构体切片
*/


/*使用JSON包的编码器编码于谦的信息为JSON文件*/
func main041() {

	//于谦的Go语言数据，此处为map
	//接下来将会编码这些数据到JSON文件中
	dataMap := make(map[string]interface{})
	dataMap["name"] = "于谦"
	dataMap["age"] = 50
	dataMap["rmb"] = 123.45
	dataMap["sex"] = true
	dataMap["hobby"] = []string{"抽烟", "喝酒", "烫头"}

	//创建并打开目标JSON文件
	dstFile, _ := os.OpenFile("D:/BJBlockChain1803/demos/W2/day3/file/于谦.json", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0666)
	defer dstFile.Close()

	//创建目标文件的编码器
	encoder := json.NewEncoder(dstFile)

	//将Go语言数据编码到JSON文件
	err := encoder.Encode(dataMap)

	//判断编码是否成功
	if err != nil{
		fmt.Println("编码数据到JSON文件失败,err=",err)
		return
	}
	fmt.Println("编码成功！")
}

/*
编码谦哥八大姨结构体切片为JSON文件
*/
func main042() {
	type Person struct {
		Name string
		Age int
		Rmb float64
		Sex bool
		Hobby []string
	}
	p1 := Person{"王钢蛋", 30, 123.45, false, []string{"抽中华", "喝农夫山泉", "烫芋头"}}
	p2 := Person{"王铁蛋", 30, 123.45, false, []string{"抽玉溪", "喝乐百氏", "烫手"}}
	p3 := Person{"王铜蛋", 30, 123.45, false, []string{"抽黄金叶", "喝三鹿牛奶", "烫光头"}}
	people := make([]Person, 0)
	people = append(people, p1, p2, p3)

	dstFile, _ := os.OpenFile("D:/BJBlockChain1803/demos/W2/day3/file/八大姨.json", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	defer dstFile.Close()

	encoder := json.NewEncoder(dstFile)
	err := encoder.Encode(people)

	//判断编码是否成功
	if err != nil{
		fmt.Println("编码数据到JSON文件失败,err=",err)
		return
	}
	fmt.Println("编码成功！")
}

/*解码《于谦.json》为map*/
func main043() {
	//打开存储JSON数据的源文件
	srcFile, _ := os.Open("D:/BJBlockChain1803/demos/W2/day3/file/于谦.json")
	defer srcFile.Close()

	//创建map，用于接收解码好的数据
	dataMap := make(map[string]interface{})

	//创建源文件的解码器
	decoder := json.NewDecoder(srcFile)

	//解码源文件中的数据，丢入dataMap所在的内存
	err := decoder.Decode(&dataMap)

	//获取解码结果
	if err != nil{
		fmt.Println("解码失败，err=",err)
		return
	}
	fmt.Println("解码成功:",dataMap)
}

/*解码谦哥八大姨JSON文件为结构体切片*/
func main044() {

	type Person struct {
		Name string
		Age int
		Rmb float64
		Sex bool
		Hobby []string
	}

	//打开存储JSON数据的源文件
	srcFile, _ := os.Open("D:/BJBlockChain1803/demos/W2/day3/file/八大姨.json")
	defer srcFile.Close()

	//创建用于接数据的变量
	people := make([]Person, 0)

	//创建源文件的解码器
	decoder := json.NewDecoder(srcFile)

	//解码源文件中的数据，丢入dataMap所在的内存
	err := decoder.Decode(&people)

	//获取解码结果
	if err != nil{
		fmt.Println("解码失败，err=",err)
		return
	}
	fmt.Println("解码成功:",people)
}